import cv2
import numpy as np

# 1. 读取原图 和 模板图
img = cv2.imread("../images/ctrl.png")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print(img_gray.shape)
temp = cv2.imread("../images/basketball.png")
h, w, _ = temp.shape
temp_gray = cv2.cvtColor(temp, cv2.COLOR_BGR2GRAY)
print(temp_gray.shape)

# 2. 进行模板匹配
ret = cv2.matchTemplate(
    img_gray,
    temp_gray,
    cv2.TM_CCOEFF_NORMED        # 匹配方法（归一化相关系数匹配法）
)
print(ret.shape)    #
print("================")
print(ret)
# 存储是归一化的结果值，取值范围在（0,1）
# 每个值表示模板在该位置的匹配程度  (相似度分数)
"""
(515, 602)
(31, 33)
(485, 570)
485 = H - h + 1 
570 = W - w + 1
"""

# （归一化相关系数匹配法） 值越大 匹配度越高
# 3. 设置阈值，筛选结果
loc = np.where(ret>=0.95)   # ret>=0.95 相似度达到95%以上
print(loc)#返回y,x的坐标
"""
输出：
(array([ 88,  88,  88, 104, 105, 219, 220, 427]), array([166, 414, 415, 520, 520, 295, 295, 521]))
符合阈值条件的 高度坐标 y    宽度坐标 x
"""

# 4. 根据筛选结果，在原图上圈出来
"""
a = [1, 2, 3]
b = [4, 5, 6]
print(zip(a, b))
for x,y in zip(a, b):
    print((x,y))
<zip object at 0x00000217C5ACF5C0>
(1, 4)
(2, 5)
(3, 6)
"""
"""
print(enumerate(a))
for x in enumerate(a):
    print(x)
<enumerate object at 0x000001EE10EFF5C0>
(0, 1)
(1, 2)
(2, 3)
"""
#将两个元组打包成一个元组
for x,y in zip(loc[1], loc[0]):
    cv2.rectangle(
        img,
        (x,y),
        (x+w, y+h),
        (0,0,255),
        2
    )

cv2.imshow("img", img)
cv2.waitKey(0)
